// ActionScript file
import classes.Aluno;
import classes.Curso;
import classes.Professor;
import classes.Telecentro;
import classes.Turma;

import flash.events.Event;

import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.events.DataGridEvent;
import mx.events.FlexEvent;
import mx.managers.PopUpManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.mxml.RemoteObject;

import title_window.cadastraTurma;
import title_window.certificado;
import title_window.lanca_nota_falta;

[Bindable]
public var combo_plataforma:ArrayCollection = new ArrayCollection(
	[ {label:"Linux", index:0},{label:"Windows",index:1}]);	
//array de cursos
[Bindable]
public var combo_curso:ArrayCollection;	
//array de telecentros
[Bindable]
public var combo_telec:ArrayCollection;	
//array de professores
[Bindable]
public var combo_prof:ArrayCollection;

//objeto do tipo turma
public var t:Turma;
//objeto do tipo curso
public var c:Curso;
//objeto do tipo professor
public var p:Professor;
//objeto do tipo telecentro
public var telec:Telecentro;

//array de turmas cadastradas
[Bindable]
public var turmas_cadastradas:ArrayCollection;
//array de alunos cadastrados na turma
[Bindable]
public var alunos_turma:ArrayCollection;
//variavel pop-up de turma
public var popUp:cadastraTurma;
//variavel pop-up de lançar notas e faltas
public var popup_nota:lanca_nota_falta;
//variavel pop-up certificado
public var popup_certificado:certificado;
//objeto do tipo turma
public var turma:Turma;
//controla a tabela
[Bindable]
private var paginaAtual:Number=0;
//total de registroa mostrados na tabela
[Bindable]
private var TotalRegistros:Number = 0;
//variavel do tipo professor
public var prof_log:Professor;

/*
FUNÇÃO CHAMADA LOGO APÓS A TELE SER REQUISITADA
-chama a funcao professores cadastrados
-adicona eventos aos botoes editar e excluir da tabela			
*/
private function inicializa(event:FlexEvent):void
{
	// Carrega o DataGri
	listar_turmas();
	this.controle_curso.listarTodosCurso();
	this.controle_telecentro.listarTodosTelecentros();
	this.controle_professor.listarProfessoresAtivos();
	dgTurma.addEventListener("editar", editar);
	dgTurma.addEventListener("excluir", excluir);
	dgTurma.addEventListener("informaoes", informaoes);	
	dgTurma.addEventListener("nota_freq", nota_freq);
	dgTurma.addEventListener("certificado_aluno",certificado_aluno);
	prof_log=parentApplication.prof;
}
//chama método listar todos (Java)
public function listar_turmas():void
{
	this.controle_turma.listarTodosPaginacao(10*paginaAtual);							
}
//PREEMCHE O DATA GRID
public function listaPaginacao_result(event:ResultEvent):void
{			
	turmas_cadastradas=event.result as ArrayCollection;			
	if(paginaAtual==0){
		BTVoltar.enabled=false;
	}else{
		BTVoltar.enabled=true;
	}	
}
//função botão avançar
private function avancar():void
{
	paginaAtual += 1;
	listar_turmas();
}
//função botão voltar
private function voltar():void
{
	paginaAtual -= 1;
	listar_turmas();
}

/*
EVENTOS DOS BOTÕES NOVO, EDITAR E EXCLUIR
*/

//abre o title window (pop-up) para cadastrar novo curso
protected function novo():void
{
	popUp=cadastraTurma(PopUpManager.createPopUp(this,cadastraTurma,true));
	popUp.addEventListener("PopUpFechou",salvou);	
	popUp.combo_curso=combo_curso;
	popUp.combo_prof=combo_prof;
	popUp.combo_telec=combo_telec;
}
//chamada após fechar o pop-up de cadastro
private function salvou(evt:Event):void
{
	t=popUp.turm;
	this.controle_turma.inserirTurma(t);	
}

//abre o title window (pop-up) para editar o curso
public function editar(e:Event):void
{	
	if(verifica()==true)
	{
		popUp=cadastraTurma(PopUpManager.createPopUp(this,cadastraTurma,true));
		popUp.addEventListener("PopUpFechou",editou);		
		popUp.turm=Turma (dgTurma.selectedItem);
		popUp.combo_curso=combo_curso;
		popUp.combo_prof=combo_prof;
		popUp.combo_telec=combo_telec;	
	}else Alert.show("Não é permitido alteração/exclusão de turmas que não pertence a você!","Aviso");	
}
//verifca se usuario tem permissão para editar, alterar e excluir
private function verifica():Boolean
{
	if(prof_log.administrador==true){
		return true;
	}else{
		if(dgTurma.selectedItem.professor.id_professor==prof_log.id_professor)return true;
		else return false;		
	}
}
//chamada após fechar o pop-up de editar
private function editou(evt:Event):void
{				
	t=popUp.turm;
	this.controle_turma.editarTurma(t);
}
//evento botão excluir da tabela
//verifica se deseja ou nao excluir
public function excluir(e:Event):void
{
	if(verifica()==true)
	{
		Alert.show("Excluir a turma '"+dgTurma.selectedItem.descricao+"' ?","Excluir Turma", Alert.YES | Alert.NO ,null,opcao);	
	}else Alert.show("Não é permitido alteração/exclusão de turmas que não pertence a você!","Aviso");	
}
//verifica a resposta do usuario
private function opcao(event:CloseEvent):void{
	if(event.detail==Alert.YES){					
		this.controle_turma.removerTurma(dgTurma.selectedItem);
	}					
}
//evento informações da tabela
//chama o relatorio da turma
public function informaoes(e:Event):void
{
	gera_relatorio_turma(dgTurma.selectedItem.id_turma);		
}

//abre o title window (pop-up) para editar o curso
public function nota_freq(e:Event):void
{		
	if(verifica()==true){
		carrega_lista_alunos();
		popup_nota=lanca_nota_falta(PopUpManager.createPopUp(this,lanca_nota_falta,true));
		popup_nota.t=Turma (dgTurma.selectedItem);
	}else Alert.show("Não é permitido alterar notas de turmas que não pertence a você!","Aviso");	
}

public function certificado_aluno(e:Event):void
{
	if(verifica()==true){
		carrega_lista_alunos();
		popup_certificado=certificado(PopUpManager.createPopUp(this,certificado,true));
		popup_certificado.t=Turma (dgTurma.selectedItem);		
	}else Alert.show("Não é permitido alterar notas de turmas que não pertence a você!","Aviso");	
}

//chama lista de alunos da turma
private function carrega_lista_alunos():void
{
	this.controle_aluno.listarAlunosTurma(dgTurma.selectedItem);
}

/*
FUNÇÕES CHAMADAS CASO OS MÉTODOS DE INSERIR, EDITAR, REMOVER E LISTAR OBTIVERAM SUCESSO 
*/
//emite mensagem e atualiza a tabela
protected function inserir_result(event:ResultEvent):void
{
	Alert.show("Cadastrado com sucesso");
	listar_turmas();
}				
//emite mensagem e atualiza a tabela
protected function editar_result(event:ResultEvent):void
{
	Alert.show("editado com sucesso");
	listar_turmas();
	if(t.situacao=="Finalizada"){
		this.controle_aluno.mudaStatusAluno(t.id_turma);
	}
}
//emite mensagem e atualiza a tabela
protected function remover_result(event:ResultEvent):void
{
	Alert.show("removido com sucesso");
	listar_turmas();
}
// result chamada metodo listar telecentro
protected function listar_telec_result(event:ResultEvent):void
{
	combo_telec=event.result as ArrayCollection;
}
// result chamada metodo listar curso
protected function listar_curso_result(event:ResultEvent):void
{
	combo_curso=event.result as ArrayCollection;
}
// result chamada metodo listar professor
protected function listar_prof_result(event:ResultEvent):void
{
	combo_prof=event.result as ArrayCollection;
}
//result lista aluno
protected function listar_aluno_result(event:ResultEvent):void
{
	alunos_turma=event.result as ArrayCollection;
}
//emite mensagem
protected function listar_aluno_fault(event:FaultEvent):void
{
	Alert.show("Erro ao editar");
}

/*
FUNÇÕES CHAMADAS CASO OS MÉTODOS DE INSERIR, EDITAR, REMOVER E LISTAR OBTIVEREM ALGUM ERRO
*/	
//emite mensagem 
protected function inserir_fault(event:FaultEvent):void
{
	Alert.show("erro ao listar os telecentros");
}
//emite mensagem
protected function editar_fault(event:FaultEvent):void
{
	Alert.show("Erro ao editar");
}
//emite mensagem
protected function remover_fault(event:FaultEvent):void
{
	Alert.show("Possivelmente há aluno associado a esta turma, logo não podemos excluí-la","Ops, ocorreu um erro");	
}
//emite mensagem
public function listaPaginacao_fault(event:FaultEvent):void
{
	Alert.show("erro ao carregar dados");
}
//emite mensagem
protected function listar_telec_fault(event:FaultEvent):void
{
	Alert.show("erro ao listar os telecentros");
}
//emite mensagem
protected function listar_curso_fault(event:FaultEvent):void
{
	Alert.show("erro ao listar os cursos");
}
//emite mensagem
protected function listar_prof_fault(event:FaultEvent):void
{
	Alert.show("erro ao listar os cursos");
}


